视图四部曲
1. 混合使用
# views.py
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import *
from .serializer import *
class BookView(APIView):
# 查看所有书籍
def get(self, request):
book_list = Book.objects.all()
bs = BookSerializers(book_list, many=True)
return Response(bs.data)
# 添加书籍
def post(self, request):
bs = BookSerializers(data=request.data)
if bs.is_valid(): # 验证数据是否有误
print(bs.validated_data) # 验证过后正确的数据: OrderedDict([('title', '三国演义'), ('price', 100), ('pub_date', datetime.date(2012, 12, 12)), ('publish', <Publish: 东莞出版社>), ('authors', [<Author: Kevin>, <Author: Aimer>])])
bs.save() # 保存数据,实际上调用的是 rest-framework 中的 create 方法
return Response(bs.data)
else:
return Response(bs.errors) # bs.errors 验证过后的错误信息
class BookDetailView(APIView):
# 查看指定的书籍
def get(self, request, id):
book_obj = Book.objects.filter(pk=id).first()
if book_obj:
bs = BookSerializers(book_obj)
return Response(bs.data)
else:
return Response({'static': 0, 'message': '没有该书籍'})
# 修改书籍
def put(self, request, id):
book_obj = Book.objects.filter(pk=id).first()
bs = BookSerializers(book_obj, data=request.data) # 修改数据的时候一定要指定修改那条数据(即: book_obj),否则在执行 .save() 的时候就相当于新增数据
if bs.is_valid(): # 验证数据是否有误
bs.save() # 保存数据,实际上调用的是 rest-framework 中的 update 方法
return Response(bs.data)
else:
return Response(bs.errors) # bs.errors 验证过后的错误信息
# 删除书籍
def delete(self, request, id):
Book.objects.filter(pk=id).delete()
return Response()
class PublishView(APIView):
# 查看所有出版社
def get(self, request):
publish_list = Publish.objects.all()
ps = PublishSerializers(publish_list, many=True)
return Response(ps.data)
# 添加出版社
def post(self, request):
ps = PublishSerializers(data=request.data)
if ps.is_valid(): # 验证数据是否有误
print(ps.validated_data) # 验证过后正确的数据: OrderedDict([('name', '台山出版社'), ('email', '123@qq.com')])
ps.save() # 保存数据,实际上调用的是 rest-framework 中的 create 方法
return Response(ps.data)
else:
return Response(ps.errors) # ps.errors 验证过后的错误信息
class PublishDetailView(APIView):
# 查看指定的出版社
def get(self, request, id):
publish_obj = Publish.objects.filter(pk=id).first()
if publish_obj:
ps = PublishSerializers(publish_obj)
return Response(ps.data)
else:
return Response({'static': 0, 'message': '没有该出版社'})
# 修改出版社
def put(self, request, id):
publish_obj = Publish.objects.filter(pk=id).first()
ps = PublishSerializers(publish_obj, data=request.data) # 修改数据的时候一定要指定修改那条数据(即: publish_obj),否则在执行 .save() 的时候就相当于新增数据
if ps.is_valid(): # 验证数据是否有误
ps.save() # 保存数据,实际上调用的是 rest-framework 中的 update 方法
return Response(ps.data)
else:
return Response(ps.errors) # ps.errors 验证过后的错误信息
# 删除出版社
def delete(self, request, id):
Publish.objects.filter(pk=id).delete()
return Response()
# serializer.py
from rest_framework import serializers
from .models import *
class PublishSerializers(serializers.ModelSerializer):
class Meta:
model = Publish
fields = '__all__'
class BookSerializers(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
# urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'book/$', BookView.as_view()),
url(r'book/(\d+)', BookDetailView.as_view()),
url(r'publish/$', PublishView.as_view()),
url(r'publish/(\d+)', PublishDetailView.as_view()),
]
2.mixin类编写视图
- 在 mixin 模块下提供了5个类,分别对应着 查询所有数据,查看指定数据,添加数据,修改数据,删除数据,其实这5个类就是将混合使用中的处理http请求的方法封装了起来
- mixin 模块下的5个类:
- mixins.ListModelMixin -> 查看所有数据
- mixins.ListModelMixin 下的 list() 方法: 封装了查看所有数据的代码
- mixins.CreateModelMixin -> 创建数据
- mixins.CreateModelMixin 下的create() 方法: 封装了添加数据的代码
- mixins.RetrieveModelMixin -> 查询指定数据
- mixins.RetrieveModelMixin 下的 retrieve() 方法: 封装了查询指定数据的代码
- mixins.UpdateModelMixin -> 修改数据
- mixins.UpdateModelMixin 下的 update() 方法: PUT请求 -> 封装了修改数据的代码
- mixins.UpdateModelMixin 下的 partial_update() 方法: PATCH -> 封装了修改数据的代码
- mixins.DestroyModelMixin -> 删除数据
- mixins.DestroyModelMixin 下的 destroy() 方法: 封装了删除数据的代码
- generics 模块下的 GenericAPIView 类,其实就是继承 rest-framework 中的 APIView,并且在这基础上扩展了一些方法
- 注意:
- 在使用mixin类编写视图的时候一定要继承 GenericAPIView 类
- 在使用 mixins.UpdateModelMixin 类的时候,要在操作单条数据的url中加上名为 pk 的命名匹配 -> url(r'book/(?P<pk>\d+)', BookDetailView.as_view())
- 在使用mixin类编写视图的时候一定要在该视图类下定义两个静态属性,且这两个静态属性的名字不能随便修改一定要使用这两个属性名:
- queryset -> 指定操作那张表的数据
- serializer_class -> 指定序列化类
# views.py
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import *
from .serializer import *
from rest_framework import mixins
from rest_framework import generics
class BookView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
# 不能随意修改这两个静态属性名,因为 mixins 模块下的 5 个类需要用到这两个静态属性
queryset = Book.objects.all() # 指定操作那张表的数据
serializer_class = BookSerializers # 指定序列化类
# 查看所有书籍
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) # self.list() 是 mixins.ListModelMixin 所提供的方法,封装了查看所有数据的代码,self.list() 的返回值: Response(数据)
# 添加书籍
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs) # self.create() 是 mixins.CreateModelMixin 所提供的方法,封装了添加数据的代码,self.create() 的返回值: Response(数据)
class BookDetailView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
# 不能随意修改这两个静态属性名,因为 mixins 模块下的 5 个类需要用到这两个静态属性
queryset = Book.objects.all() # 指定操作那张表的数据
serializer_class = BookSerializers # 指定序列化类
# 查看指定的书籍
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) # self.retrieve() 是 mixins.RetrieveModelMixin 所提供的方法,封装了查询指定数据的代码,self.retrieve() 的返回值: Response(数据)
# 修改书籍
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) # self.update() 是 mixins.UpdateModelMixin 所提供的方法,封装了修改数据的代码,self.update() 的返回值: Response(数据)
# 删除书籍
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs) # self.destroy() 是 mixins.DestroyModelMixin 所提供的方法,封装了删除数据的代码,self.destroy() 的返回值: Response(数据)
class PublishView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
# 查看所有出版社
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
# 添加出版社
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class PublishDetailView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
# 查看指定的出版社
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
# 修改出版社
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
# 删除出版社
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
# serializer.py
from rest_framework import serializers
from .models import *
class PublishSerializers(serializers.ModelSerializer):
class Meta:
model = Publish
fields = '__all__'
class BookSerializers(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
# urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'book/$', BookView.as_view()),
url(r'book/(?P<pk>\d+)', BookDetailView.as_view()),
url(r'publish/$', PublishView.as_view()),
url(r'publish/(?P<pk>\d+)', PublishDetailView.as_view()),
]
3. 使用通用的基于类的视图
- 使用通用的基于类的视图说明:
- 简化了mixin类编写视图的操作
- generics 模块下的类的功能说明:
- GenericAPIView 继承了 APIView,且在这基础上扩展了新的功能
- ----------------------------------------------------
- generics.ListAPIView 提供了 查询所有数据 的功能
- generics.CreateAPIView 提供了 添加数据 的功能
- generics.ListCreateAPIView 提供了 查询所有数据、添加数据 的功能
- generics.RetrieveAPIView 提供了 查询指定数据 的功能
- generics.UpdateAPIView 提供了 修改数据 的功能
- generics.DestroyAPIView 提供了 删除数据 的功能
- generics.RetrieveUpdateAPIView 提供了 查询指定数据、修改数据 的功能
- generics.RetrieveDestroyAPIView 提供了 查询指定数据、删除数据 的功能
- generics.RetrieveUpdateDestroyAPIView 提供了 查询指定数据、修改数据、删除数据 的功能
- generics.ListAPIView 的说明:
- 提供了 查询所有数据 的功能
- ---------------------------------------
- 继承了 mixins.ListModelMixin
- 提供了处理 GET 请求的方法
- 处理GET请求的方法调用了 mixins.ListModelMixin 下的 list() 方法
- generics.CreateAPIView 的说明:
- 提供了 添加数据 的功能
- ---------------------------------------
- 继承了 mixins.CreateModelMixin
- 提供了处理 POST 请求的方法
- 处理POST请求的方法调用了 mixins.CreateModelMixin 下的 create() 方法
- generics.ListCreateAPIView 的说明:
- 提供了 查询所有数据、添加数据 的功能
- ---------------------------------------
- 继承了 mixins.ListModelMixin / mixins.CreateModelMixin
- 提供了处理 GET / POST 请求的方法
- 处理GET请求的方法调用了 mixins.ListModelMixin 下的 list() 方法
- 处理POST请求的方法调用了 mixins.CreateModelMixin 下的 create() 方法
- generics.RetrieveAPIView 的说明:
- 提供了 查询指定数据 的功能
- ---------------------------------------
- 继承了 mixins.RetrieveModelMixin
- 提供了处理 GET 请求的方法
- 处理GET请求的方法调用了 mixins.RetrieveModelMixin 下的 retrieve() 方法
- generics.UpdateAPIView 的说明:
- 提供了 修改数据 的功能
- ---------------------------------------
- 继承了 mixins.UpdateModelMixin
- 提供了处理 PUT / PATCH 请求的方法
- 处理PUT请求的方法调用了 mixins.UpdateModelMixin 下的 update() 方法
- 处理PATCH请求的方法调用了 mixins.UpdateModelMixin 下的 partial_update() 方法
- generics.DestroyAPIView 的说明:
- 提供了 删除数据 的功能
- ---------------------------------------
- 继承了 mixins.DestroyModelMixin
- 提供了处理 DELETE 请求的方法
- 处理DELETE请求的方法调用了 mixins.DestroyModelMixin 下的 destroy() 方法
- generics.RetrieveUpdateAPIView 的说明:
- 提供了 查询指定数据、修改数据 的功能
- ---------------------------------------
- 继承了 mixins.RetrieveModelMixin / mixins.UpdateModelMixin
- 提供了处理 GET / PUT / PATCH 请求的方法
- 处理GET请求的方法调用了 mixins.RetrieveModelMixin 下的 retrieve() 方法
- 处理PUT请求的方法调用了 mixins.UpdateModelMixin 下的 update() 方法
- 处理PATCH请求的方法调用了 mixins.UpdateModelMixin 下的 partial_update() 方法
- generics.RetrieveDestroyAPIView 的说明:
- 提供了 查询指定数据、删除数据 的功能
- ---------------------------------------
- 继承了 mixins.RetrieveModelMixin / mixins.DestroyModelMixin
- 提供了处理 GET / DELETE 请求的方法
- 处理GET请求的方法调用了 mixins.RetrieveModelMixin 下的 retrieve() 方法
- 处理DELETE请求的方法调用了 mixins.DestroyModelMixin 下的 destroy() 方法
- generics.RetrieveUpdateDestroyAPIView 的说明:
- 提供了 查询指定数据、修改数据、删除数据 的功能
- ---------------------------------------
- 继承了 mixins.RetrieveModelMixin / mixins.UpdateModelMixin / mixins.DestroyModelMixin
- 提供了处理 GET / PUT / PATCH / DELETE 请求的方法
- 处理GET请求的方法调用了 mixins.RetrieveModelMixin 下的 retrieve() 方法
- 处理PUT请求的方法调用了 mixins.UpdateModelMixin 下的 update() 方法
- 处理PATCH请求的方法调用了 mixins.UpdateModelMixin 下的 partial_update() 方法
- 处理DELETE请求的方法调用了 mixins.DestroyModelMixin 下的 destroy() 方法
- 注意:
- 一定要继承 generics 模块所提供的功能类
- 如果继承了 generics.UpdateAPIView 等涉及到修改数据的功能类,那么就要在操作单条数据的url中加上名为 pk 的命名匹配,因为修改数据的功能类继承了mixins.UpdateModelMixin类,且mixins.UpdateModelMixin类中的代码是通过“pk”这个名字去获取url中的参数,然后才能查询到指定的数据对象 -> url(r'book/(?P<pk>\d+)', BookDetailView.as_view({'请求方式': '视图类的处理请求的方法名'}))
- 在编写视图的时候一定要在该视图类下定义两个静态属性,且这两个静态属性的名字不能随便修改一定要使用这两个属性名:
- queryset -> 指定操作那张表的数据
- serializer_class -> 指定序列化类
# views.py
from .models import *
from .serializer import *
from rest_framework import generics
class BookView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializers
class BookDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializers
class PublishView(generics.ListCreateAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
class PublishDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
# urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'book/$', BookView.as_view()),
url(r'book/(?P<pk>\d+)', BookDetailView.as_view()),
url(r'publish/$', PublishView.as_view()),
url(r'publish/(?P<pk>\d+)', PublishDetailView.as_view()),
]
4.终极版
- 终极版的说明:
- 两条url使用同一个视图类
- 视图类不再继承mixins模块下的5个类,而是继承 ModelViewSet 类
- ModelViewSet类的说明:
- ModelViewSet类已经继承了mixins模块下的5个类
- .as_view() 新用法的说明:
- viewsets模块下的ViewSetMixin类通过重写 .as_view() 方法,实现了通过传递的字典({'get':'list', 'post':'create'})方式对处理http请求的方法进行分发
- 注意:
- 一定要继承 ModelViewSet 类
- 要在操作单条数据的url中加上名为 pk 的命名匹配,因为ModelViewSet类继承了mixins.UpdateModelMixin类,且mixins.UpdateModelMixin类中的代码是通过“pk”这个名字去获取url中的参数,然后才能查询到指定的数据对象 -> url(r'book/(?P<pk>\d+)', BookDetailView.as_view({'请求方式': '视图类的处理请求的方法名'}))
- 在编写视图的时候一定要在该视图类下定义两个静态属性,且这两个静态属性的名字不能随便修改一定要使用这两个属性名:
- queryset -> 指定操作那张表的数据
- serializer_class -> 指定序列化类
# views.py
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import *
from .serializer import *
from rest_framework import viewsets
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializers
class PublishViewSet(viewsets.ModelViewSet):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
# urls.py
# url(r'book/$', BookViewSet.as_view({'请求类型': '视图类的处理请求的方法名'})
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'book/$', BookViewSet.as_view({
"get": "list", # list 方法是 mixins.ListModelMixin 所提供的方法,封装了查看所有数据的代码,由于 viewsets.ModelViewSet 继承了 mixins.ListModelMixin 所以可以使用 list 方法
"post": "create" # create 方法是 mixins.CreateModelMixin 所提供的方法,封装了添加数据的代码,由于 viewsets.ModelViewSet 继承了 mixins.CreateModelMixin 所以可以使用 create 方法
})),
url(r'book/(?P<pk>\d+)', BookViewSet.as_view({
'get': 'retrieve', # retrieve 方法是 mixins.RetrieveModelMixin 所提供的方法,封装了查询指定数据的代码,由于 viewsets.ModelViewSet 继承了 mixins.RetrieveModelMixin 所以可以使用 retrieve 方法
'put': 'update', # update 方法是 mixins.UpdateModelMixin 所提供的方法,封装了修改数据的代码,由于 viewsets.ModelViewSet 继承了 mixins.UpdateModelMixin 所以可以使用 update 方法
'patch': 'partial_update', # partial_update 方法是 mixins.UpdateModelMixin 所提供的方法,封装了修改数据的代码,由于 viewsets.ModelViewSet 继承了 mixins.UpdateModelMixin 所以可以使用 partial_update 方法
'delete': 'destroy' # destroy 方法是 mixins.DestroyModelMixin 所提供的方法,封装了删除数据的代码,由于 viewsets.ModelViewSet 继承了 mixins.DestroyModelMixin 所以可以使用 destroy 方法
})),
url(r'publish/$', PublishViewSet.as_view({
"get": "list",
"post": "create"
})),
url(r'publish/(?P<pk>\d+)', PublishViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})),
]
4.重写 list、create、retrieve、update、partial_update、destroy 方法
- 如果默认返回给前端的数据结构不合适的话,可以通过重写 list 等方法重新构造数据结构
- 原理: 在视图类下重写 list 等方法,那么就不会执行 mixin 模块下的5个类所分别提供的方法(即: list、create、retrieve、update、partial_update、destroy)
# views.py
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import *
from .serializer import *
from rest_framework import viewsets
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializers
# 重写编写 list 方法覆盖 mixins.ListModelMixin 类下的 list 方法
def list(self, request, *args, **kwargs):
ret = {
'static': 1,
'data': {
'a': 1,
'b': 2,
}
}
return Response(ret)
# 重写编写 retrieve 方法覆盖 mixins.RetrieveModelMixin 类下的 retrieve 方法
def retrieve(self, request, *args, **kwargs):
ret = {
'data': '你所查询到的单条数据'
}
return Response(ret)
class PublishViewSet(viewsets.ModelViewSet):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
# urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'book/$', BookViewSet.as_view({
"get": "list", # list 方法是 mixins.ListModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.ListModelMixin 所以可以使用 list 方法
"post": "create" # create 方法是 mixins.CreateModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.CreateModelMixin 所以可以使用 create 方法
})),
url(r'book/(?P<pk>\d+)', BookViewSet.as_view({
'get': 'retrieve', # retrieve 方法是 mixins.RetrieveModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.RetrieveModelMixin 所以可以使用 retrieve 方法
'put': 'update', # update 方法是 mixins.UpdateModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.UpdateModelMixin 所以可以使用 update 方法
'patch': 'partial_update', # partial_update 方法是 mixins.UpdateModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.UpdateModelMixin 所以可以使用 partial_update 方法
'delete': 'destroy' # destroy 方法是 mixins.DestroyModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.DestroyModelMixin 所以可以使用 destroy 方法
})),
url(r'publish/$', PublishViewSet.as_view({
"get": "list",
"post": "create"
})),
url(r'publish/(?P<pk>\d+)', PublishViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})),
]
.as_view() 的新用法
1..as_view() 新用法的说明
- .as_view() 新用法的作用就是两条url使用同一个视图类
- .as_view() 新用法其实就是视图四部曲中的终极版
2..as_view() 新的使用方式一
- viewsets模块下的ViewSetMixin类通过重写 .as_view() 方法,实现了通过传递的字典({'get':'list', 'post':'create'})方式对处理http请求的方法进行分发
- 通过继承 ViewSetMixin 类 和 APIView 类 实现 .as_view() 的新用法
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import viewsets
class BookViewSet(viewsets.ViewSetMixin, APIView):
def list(self, request, *args, **kwargs):
ret = {
'data': '你所查询到的所有数据'
}
return Response(ret)
def create(self, request, *args, **kwargs):
ret = {
'data': '你所添加的数据'
}
return Response(ret)
def retrieve(self, request, *args, **kwargs):
ret = {
'data': '你所查询到的单条数据'
}
print(ret)
return Response(ret)
def update(self, request, *args, **kwargs):
ret = {
'data': '你所修改的数据'
}
return Response(ret)
def partial_update(self, request, *args, **kwargs):
ret = {
'data': '你所修改的数据'
}
return Response(ret)
def destroy(self, request, *args, **kwargs):
ret = {
'data': '删除数据成功'
}
return Response(ret)
# urls.py
urlpatterns = [
url(r'book/$', BookViewSet.as_view({
"get": "list", # list 方法是 mixins.ListModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.ListModelMixin 所以可以使用 list 方法
"post": "create" # create 方法是 mixins.CreateModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.CreateModelMixin 所以可以使用 create 方法
})),
url(r'book/(?P<pk>\d+)', BookViewSet.as_view({
'get': 'retrieve', # retrieve 方法是 mixins.RetrieveModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.RetrieveModelMixin 所以可以使用 retrieve 方法
'put': 'update', # update 方法是 mixins.UpdateModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.UpdateModelMixin 所以可以使用 update 方法
'patch': 'partial_update', # partial_update 方法是 mixins.UpdateModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.UpdateModelMixin 所以可以使用 partial_update 方法
'delete': 'destroy' # destroy 方法是 mixins.DestroyModelMixin 所提供的方法,由于 viewsets.ModelViewSet 继承了 mixins.DestroyModelMixin 所以可以使用 destroy 方法
})),
]
3..as_view() 新的使用方式二
- .as_view() 的使用方式二实际上就是视图四部曲中的终极版,通过继承 ModelViewSet 类,实际上 ModelViewSet 类也是继承了 viewsets 模块下的 ViewSetMixin 类
这里就不做代码演示了不懂的可以看回 视图四部曲中的终极版 或者 查看 ModelViewSet 类的源码